/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package videorent;

import java.util.GregorianCalendar;

/** Representa a una Tarjeta de Crédito.
 *
 * @author Rafael
 */
public class TarjetaCredito implements Cloneable {

    private String numero;
    private String banco;
    private String codSeg;
    private GregorianCalendar fechaVenc;

    /** Este es el constructor
     * @param numero numero de la Tarjeta.
     * @param banco Nombre del banco que emite la Tarjeta.
     * @param codSeg Codigo de seguridad de la Tarjeta.
     * @param fechaVenc fecha del dia de vencimiento de la Tarjeta.
     */
    public TarjetaCredito(String numero, String banco, String codSeg, GregorianCalendar fechaVenc) {
        this.numero = numero;
        this.banco = banco;
        this.codSeg = codSeg;
        this.fechaVenc = fechaVenc;
    }

    /** Este metodo clona una instancia de Tarjeta de Credito.
     * @return TarjetaCredito es un clon de dela Tarjeta.
     */
    public TarjetaCredito clone() {
        TarjetaCredito obj = null;
        try {
            obj = (TarjetaCredito) super.clone();
        } catch (CloneNotSupportedException ex) {
            System.out.println(" No se puede duplicar: " + ex);
        }
        return obj;
    }

    /** Este metodo retorna el nombre del Banco que emite la Tarjeta.
     * @return Nombre del banco.
     */
    public String getBanco() {
        return banco;
    }

    /**
     * Este metodo asigna el banco a la tarjeta.
     * @param banco Nombre del banco.
     */
    public void setBanco(String banco) {
        this.banco = banco;
    }

    /** Este metodo retorna el Codigo de seguridad de la Tarjeta.
     * @return Codigo de seguridad.
     */
    public String getCodSeg() {
        return codSeg;
    }

    /**
     * Este metodo asigna el codigo de seguridad de la tarjeta.
     * @param codSeg de Seguridad.
     */
    public void setCodSeg(String codSeg) {
        this.codSeg = codSeg;
    }

    /** Este metodo retorna el la fecha de vencimiento de la Tarjeta.
     * @return Fecha de Vencimiento de la tarjeta.
     */
    public GregorianCalendar getFechaVenc() {
        return fechaVenc;
    }

    /**
     * Este metodo asigna la fecha de vencimiento de la tarjeta.
     * @param fechaVenc Fecha de vencimiento de la tarjeta.
     */
    public void setFechaVenc(GregorianCalendar fechaVenc) {
        this.fechaVenc = fechaVenc;
    }

    /** Este metodo retorna el la numero de la Tarjeta.
     * @return Numero de la tarjeta.
     */
    public String getNumero() {
        return numero;
    }
    
    /**
     * Este metodo asigna un numero a la tarjeta.
     * @param numero Numero de la tarjeta.
     */
    public void setNumero(String numero) {
        this.numero = numero;
    }

    /**
     * Este metodo actualiza los datos de una tarjeta de credito.
     * @param numero numero de la tarjeta de credito.
     * @param banco  banco de la tarjeta de credito.
     * @param codSeg codigo de seguridad de la tarjeta de credito.
     * @param fechaVenc fecha de vencimiento de la tarjeta de credito.
     */
    public void actualizarDatos(String numero, String banco, String codSeg, GregorianCalendar fechaVenc) {
        this.setBanco(banco);
        this.setNumero(numero);
        this.setCodSeg(codSeg);
        this.setFechaVenc(fechaVenc);

    }

    /**
     * Este metodo verifica si una Tarjeta esta proxima a vencer.
     * @param fecha fecha de vencimiento con la que se compara la tarjeta.
     * @return Retorna true si la tarjeta esta proxima a vencer.
     */
    public boolean proximaVencer(GregorianCalendar fecha) {
        GregorianCalendar fv = this.getFechaVenc();
        GregorianCalendar fechaConsiderada = (GregorianCalendar) fecha.clone();

        //A la fecha del dia considerado le sumamos 35 dias
        fechaConsiderada.add(GregorianCalendar.DATE, 35);

        return fechaConsiderada.after(fv);
    }

    /**
     * Este metodo devuelve los datos de la tarjeta en una cadena de caracteres.
     * @return Datos que cumplen con el formato del archivo de salida.
     */
    public String obtenerDatosTC() {
        GregorianCalendar fv = this.getFechaVenc();
        String linea = "";
        linea += this.getNumero() + " & ";
        linea += this.getBanco() + " & ";
        linea += this.getCodSeg() + " & ";
        linea += fv.get(GregorianCalendar.MONTH) + "/" + fv.get(GregorianCalendar.YEAR);
        return linea;
    }
}
